home *** CD-ROM | disk | FTP | other *** search
-
- PopUpMenuClass
- ~~~~~~~~~~~~~~
-
- Release: 1.1 (29.12.1993)
- Author: Markus Aalto
-
-
- COPYRIGHT
- ~~~~~~~~~
-
- PopUpMenuClass BOOPSI object for AmigaDOS V37 or greater.
- Copyright © 1993 Markus Aalto
-
- This program is freely distributable software. You may distribute
- it freely as long as no more than nominal fee is required for
- copying it. Also it can be included to freely distributable disk
- collections such as Fred Fish Collection.
-
- It may also be reviewed in Amiga specific magazines and added to
- accompaning disks if the disk doesn't cost any extra to the magazine
- byers. However you have to mail that specific issue to the Author
- free of charge.
-
- This program is distributed without warranty of any kind. So no
- responsibility is taken for using this program, its documentation,
- functionality or damages it may cause.
-
- If you want to use part of this package in PD/Freeware/Shareware
- programs you are free to do so. For commercial applications please
- contact the author.
-
-
- DUE TO MISUNDERSTANDING OF GNU PUBLIC LICENCE AGREEMENT ON MY PART
- THIS VERSION AND ALL THE LATER VERSIONS ARE **NOT** DISTRIBUTED UNDER
- THE GNU PUBLIC LICENCE AS VERSION 1.0 WAS.
-
- You can contact the author by writing to Markus Aalto,
- Muurahaisentie 11a, 01490 VANTAA, FINLAND. Or send EMail to
- s37732v@vipunen.hut.fi.
-
-
- INTRODUCTION
- ~~~~~~~~~~~~
-
- This is a documentation for PopUpMenu gadget class. This gadget
- class is implemented as a subclass of "gadgetclass" BOOPSI class.
- Therefore it inherits all the qualities of its parent supporting
- things like disabling, relative positions and relative dimensions.
-
- PopUpMenu gadget is based on a idea of Cycle and ListView gadget.
- Cycle gadgets are nice because they don't take too much space
- in GUI but are a pain if there are many options to choose from.
- The ListView gadget is much nicer but it takes a lot of space.
- The solution which is existed in a many other platforms earlier
- is a concept of PopUpMenu gadgets which open up a Menu when
- gadget is pressed and this is exactly what PopUpManuClass now
- brings to the use of Amiga users.
-
- Because there is always room for improvement in any program there
- is also in this class, but for now it does its job quite nicely.
- If you feel the need to continue the effort I have started, please
- feel free to implement it further. I would like to get the changes
- however because I intend to do further developing of my own too.
-
- For those of you who think this is breaking the concept of User
- Style Guide conforming programming I want to say that I have tried
- to conserve the look/feel of AmigaOS in a behaviour of this gadget.
- Because Commodore haven't offered this solution I think that this
- is a very good substitution until they do cover this area in future
- OS releases (I hope). Also I don't think that it's necessary to
- follow exactly all the steps the Style Guide represents. In my
- opinion they should be used as a guide line, which you should try
- to follow in those parts of the programming where it's feasible
- or possible at all.
-
-
-
- FUNCTION
- ~~~~~~~~
-
- PopUpMenuClass link-time library consists of 2 public functions
- user can call. These are explained in detail in PopUpMenuClass.doc.
-
- CreatePopUpMenuClass() function is used to create a private subclass
- of 'gadgetclass'- It returns a pointer to this newly created class
- so that you can use NewObject() system call to create your own objects.
-
- DisposePopUpMenuClass() is the function user have to call to free the
- resources allocated by CreatePopUpMenuClass(). Call it when you are
- done using PopUpMenuClass.
-
-
-
- ATTRIBUTES
- ~~~~~~~~~~
-
- The tags recognized by the PopUpMenu gadget class are.
-
- PUMG_Labels (List *)
- A Pointer to standard Exec List, where ln_Name fields point to
- displayed item names. If the item list is empty then empty List
- structure or NULL pointer can be used. This tag also accepts
- a tag value of ~0, which means that OM_SET method doesn't
- return a non-null value, to indicate that gadget shouldn't
- be refreshed. This is a good way to detach a list while modifying
- it. Default is NULL.
- (Create, Set, Get.)
-
- PUMG_Active (UWORD)
- The ordinal number, counting from zero, of the active choice
- of the gadget. Default is zero.
- (Create, Set, Get, Update, Notify.)
-
-
- PUMG_TextFont (TextFont *)
- A Pointer to opened TextFont for Gadget Text/PopUpMenu to
- use. If this is NULL then default RastPort font returned
- with GM_RENDER method is used. Default is NULL.
- (Create, Set, Get.)
-
- PUMG_NewLook (BOOL)
- Under KickStart V39 or greater you can set this flag to TRUE,
- if you want to get NewLook look-a-like PopUpMenu.
- Default is FALSE.
- (Create, Get.)
-
- GA_Disabled (BOOL)
- Set this attribute to TRUE to disable PopUpMenu, to FALSE
- otherwise. Default is FALSE. Note that Gadget isn't updated
- automatically. Instead it SetGadgetAttrs() returns you
- non-NULL value, which means that you should do the refreshing.
- (Create and Set.)
-
-
-
- POPUPMENUCLASS GADGET DIMENSIONS
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- There are no predefined dimensions for PopUpMenu gadget. The
- width should be atleast 28 pixels (PUMG_MinWidth), and height
- should be atleast 8 pixels (PUMG_MinHeight). This gadget knows
- how to handle the strings wider than the gadget. However it
- doesn't try to clip texts higher than the gadget, so use
- the font height (tf->tf_YSize + INTERHEIGHT) to give a good look
- for the gadget. (INTERHEIGHT is a predefined system value for
- GadTools gadgets.)
-
-
-
- KEYBOARD OPERATION
- ~~~~~~~~~~~~~~~~~~
-
- You can also use keyboard to control the PopUpMenu gadget. Gadget
- can be activated from a program by ActivateGadget() intuition
- call. You can use following keyboard commands to control menu.
-
- CURSOR-UP - Move up in a menu.
- CURSOR-DOWN - Move down in a menu.
- ALT-CURSOR-UP - Move start of a menu list.
- ALT-CURSOR-DOWN - Move end of the menu list.
- RETURN - Select item.
- ESC - Escape menu.
-
-
-
- ATTRIBUTE SETTINGS
- ~~~~~~~~~~~~~~~~~~
-
- If you want to have a automatic update for a gadget, when you
- call SetGadgetAttrs() you should use following functions
- instead of SetGadgetAttrs().
-
- void New_SetGadgetAttrsA( struct Gadget *gadget,
- struct Window *window,
- struct Requester *req,
- struct TagItem *tags )
- {
- if( SetGadgetAttrsA( gadget, window, req, tags) ) {
- RefreshGList( gadget, window, req, 1);
- }
- }
-
- or
-
- void New_SetGadgetAttrs( struct Gadget *gadget,
- struct Window *window,
- struct Requester *req,
- ULONG item, ... )
- {
- New_SetGadgetAttrsA( gadget, window, req, (struct TagItem *)&item);
- }
-
-
-
-
- NOTES
- ~~~~~
-
- PopUpMenuClass.lib needs following libraries to be open:
- graphics.library, intuition.library and utility.library. All
- version 37 or greater of course.
-
- If SetGadgetAttrs() returns anything else than 0 (when setting
- atrributes for PopUpMenu gadget) you should call intuition
- gadget refresh functions.
-
-
- ********************** WARNING WARNING ***********************
-
- If you use gadget's ID value to identify your PopUpMenu gadget
- then do not let other Boopsi gadgets send GA_ID messages to
- your gadget. You can prevent this by using Map tags and mapping
- GA_ID to TAG_IGNORE. This is possibly a bug in 'gadgetclass'
- BOOPSI class because 'OM_UPDATE' methods should not change GA_ID
- values - or at least RKM says it shouldn't.
-
- ********************** WARNING WARNING ***********************
-
-
- If you want to hear the gadget Active item changes, then you have
- 2 possibilities.
-
- Listen to IDCMP_GADGETUP messages for changes and get the new
- Active value from Code field of IntuiMessage structure.
- Remember to set GA_RelVerify for the gadget.
-
- Listen to IDCMP_IDCMPUPDATE message for changes. The returned
- TagList contains GA_ID and PUMG_Active.
-
-
-
-
- BUGS
- ~~~~
-
- Doesn't scroll the list if there is more items than fits to the
- screen. Is it even necessary?
-
- Should work if put to window borders, but the colors won't look
- right.
-
-
-
- HISTORY
- ~~~~~~~
-
- 1.1: 29.12.93
- --------------
-
- Added PUMG_NewLook tag so that users of KS39 or greater can get
- NewLook look-a-like PopUpMenus.
-
- Made some code cleaning/optimizations.
-
-